home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / dev / c / AMesaRTL.lha / Mesa-2.6 / amiga / src-glut / glutDestroyWindow.c < prev    next >
C/C++ Source or Header  |  1998-09-19  |  2KB  |  114 lines

  1. /*
  2.  * Amiga GLUT graphics library toolkit
  3.  * Version:  2.0
  4.  * Copyright (C) 1998 Jarno van der Linden
  5.  *
  6.  * This library is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU Library General Public
  8.  * License as published by the Free Software Foundation; either
  9.  * version 2 of the License, or (at your option) any later version.
  10.  *
  11.  * This library is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14.  * Library General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU Library General Public
  17.  * License along with this library; if not, write to the Free
  18.  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  */
  20.  
  21.  
  22. /*
  23.  * glutDestroyWindow.c
  24.  *
  25.  * Version 1.0  27 Jun 1998
  26.  * by Jarno van der Linden
  27.  * jarno@kcbbs.gen.nz
  28.  *
  29.  * Version 2.0  19 Sep 1998
  30.  * by Jarno van der Linden
  31.  * jarno@kcbbs.gen.nz
  32.  *
  33.  * - Changed to runtime library format
  34.  * - Close window only if mywindow flag set
  35.  *
  36.  */
  37.  
  38.  
  39. #include <proto/intuition.h>
  40. #include <proto/exec.h>
  41. #include <proto/gadtools.h>
  42.  
  43. #include <stdlib.h>
  44.  
  45. #include "glutstuff.h"
  46.  
  47.  
  48. VOID StripIntuiMessages(struct MsgPort *mp, struct Window *win)
  49. {
  50.     struct IntuiMessage *msg;
  51.     struct Node *succ;
  52.  
  53.     msg = (struct IntuiMessage *)mp->mp_MsgList.lh_Head;
  54.  
  55.     while(succ = msg->ExecMessage.mn_Node.ln_Succ)
  56.     {
  57.         if(msg->IDCMPWindow == win)
  58.         {
  59.             Remove(msg);
  60.  
  61.             ReplyMsg(msg);
  62.         }
  63.         msg = (struct IntuiMessage *)succ;
  64.     }
  65. }
  66.  
  67.  
  68. VOID CloseWindowSafely(struct Window *win)
  69. {
  70.     Forbid();
  71.     StripIntuiMessages(win->UserPort, win);
  72.     win->UserPort = NULL;
  73.     ModifyIDCMP(win, 0L);
  74.     Permit();
  75.  
  76.     CloseWindow(win);
  77. }
  78.  
  79.  
  80. __asm __saveds void glutDestroyWindow( register __d0 int win )
  81. {
  82.     struct GlutWindow *gw;
  83.     struct Menu *menu;
  84.  
  85.     gw = stuffGetWin(win);
  86.  
  87.     stuffLinkOutWin(gw);
  88.  
  89.     ClearMenuStrip(gw->window);
  90.     menu = gw->menu;
  91.     while(menu)
  92.     {
  93.         FreeMenus(menu->FirstItem);
  94.         menu->FirstItem = NULL;
  95.         menu = menu->NextMenu;
  96.     }
  97.     FreeMenus(gw->menu);
  98.  
  99.     FreeVisualInfo(gw->vi);
  100.  
  101.     if(!gw->mywindow)
  102.     {
  103.         gw->window->UserPort = NULL;
  104.         ModifyIDCMP(gw->window, 0);
  105.     }
  106.  
  107.     AmigaMesaRTLDestroyContext(gw->context);
  108.  
  109.     if(gw->mywindow)
  110.         CloseWindowSafely(gw->window);
  111.  
  112.     free(gw);
  113. }
  114.